#pragma once
#include <OgreCamera.h>
#include <OgreEntity.h>
#include <OgreLogManager.h>
#include <OgreRoot.h>
#include <OgreViewport.h>
#include <OgreSceneManager.h>
#include <OgreRenderWindow.h>
#include <OgreConfigFile.h>

#include <OISEvents.h>
#include <OISInputManager.h>
#include <OISKeyboard.h>
#include <OISMouse.h>
#include "OgreWindowEventUtilities.h"
class State{
public:
	enum Msg {NEXT_STATE,EXCAPE,NEXT_LEVEL};

	//////////////////////////////////////////////////////////////////////////
	//listeners
	Ogre::FrameListener *frameListener;
	Ogre::WindowEventListener * windowEventListener;
	OIS::KeyListener *keyListener;
	OIS::MouseListener *MouseListener;
	//////////////////////////////////////////////////////////////////////////
public:
	virtual void init()=0;
	virtual void stateStarted()=0;
	virtual void stateEnded()=0;
protected:
	virtual void endMe(Msg next){};
	//////////////////////////////////////////////////////////////////////////
public:
	State(void);
	virtual ~State(void);
};